///@file PCExpansion.h
///@brief Declaration of a polynomial chaos expansion
///@author Arnaud Duval
///@version 0.0
///@date 2010/05/10


#ifndef PCEXPANSION_H
#define PCEXPANSION_H

#include "../../mathobject/include/Vector.h"
#include "IndexSet.h"
#include "PCbasis.h"
#include <cstring>
#include <iostream>

///@class PCExpansion
///@brief Class defining an polynomial chaos expansion
class PCExpansion
{
	private:
		///@brief Basis of the polynomial chaos expansion
		PCbasis basis;
		///@brief Coefficients of the polynomial chaos expansion
		Vector a;
	public:
		///@brief Default constructor
		PCExpansion();
		///@brief Constructor with arguments
		PCExpansion(unsigned int, std::string*, Vector, IndexSet);
		///@brief Constructor from a file
		PCExpansion(std::string);
		///@brief Destructor
		~PCExpansion();
		///@brief Evaluate the PC expansion for a given set of parameters
		double Evaluate(Vector);

		///@brief Overload of << operator
		friend std::ostream& operator << (std::ostream&, const PCExpansion &);
};





#endif